package com.gitee.cashzhang27.test.sdk.bestsign.domain.request;

import cn.hutool.http.Method;
import com.gitee.cashzhang27.test.sdk.bestsign.domain.AbstractBestSignRequest;
import com.gitee.cashzhang27.test.sdk.bestsign.domain.BestSignRequest;
import com.gitee.cashzhang27.test.sdk.bestsign.domain.response.ContractSendByTemplateResponse;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * 用模板变量手动签
 *
 * @author Cash Zhang
 * @version v1.0
 * @since 2019/08/09 16:29
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class ContractSendByTemplateRequest extends AbstractBestSignRequest implements
    BestSignRequest<ContractSendByTemplateResponse> {

  /**
   * 合同编号
   */
  private String contractId;
  /**
   * 指定给哪个用户看
   */
  private String signer;
  /**
   * 预览图片清晰度，
   * 枚举值：
   * 96-低清（默认），
   * 120-普清，
   * 160-高清，
   * 240-超清
   * 非必输
   */
  private String dpi;
  /**
   * 签署链接的过期时间，unix 时间戳。超过此时间则无法打
   * 开签署链接，需要获取新的签署链接。格式为秒级的 unix
   * 时间戳，如希望“2017/12/30 10:21:52”到期，则设置为
   * “1514600512”。
   * 注：并不是合同的可签署到期时间，只是此签署链接的有
   * 效期。
   * 由于返回的是短链接，如果没有设置则默认是 30 分钟，如
   * 果设置了以设置的为准，但有效期最大不能超过 7 天。
   */
  private String expireTime;
  /**
   * 模板ID
   */
  private String tid;
  /**
   * “获取模版变量”接口来获取，挑选出 response
   * 中本次手动签需要用到的“type”为“50、40”的“name”
   * 字段值即需要使用的变量名称，拼接成字符串格式，不同
   * 变量名称之间用英文逗号间隔。日期类型的变量为“date”、
   * “date1”、“date2”等 date 带流水号的格式。
   * 使用示例如下：
   * "varNames" :  "甲方盖章 1,甲方盖章 2,date,date1"
   */
  private String varNames;
  /**
   * 是否允许拖动
   * 在有指定 signaturePOSTion 参数的情况下，
   * 签名位置。取值 1/0。
   * 默认 1
   * 0：不允许，
   * 1：允许
   * 非必输
   */
  private String isAllowChangeSignaturePosition;
  /**
   * 手动签署时，当用户签署完成后，签署页面指定回跳的页，
   * 如果没填此参数则签署完成后跳转到合同预览页面。
   * 如果 returnurl 带有“http”或“https”开头则判定 h5 跳转，
   * 如果 returnurl 不带“http”或“https”开头则判定为微信小程序跳转。
   * 非必输
   */
  private String returnUrl;
  /**
   * 手动签署时指定接收签署验证码的邮箱，填写此项则签署
   * 页面可实现“邮箱验证码”与“短信验证码”的切换
   * 非必输
   */
  private String vcodeMail;
  /**
   * 手动签署时指定接收手机验证码的手机号，如果需要采用
   * 手动签署页面校验短信验证码，则此项必填。
   * 如果手动签不需要短信校验，则此项可不填。
   * 自动签可不填此项。
   * 非必输
   */
  private String vcodeMobile;
  /**
   * 手动签署时是否手绘签名。取值 0/1/2。
   * 0 点击签名图片不会触发手写面板（禁止手写）。
   * 1 点击签名图片能触发手写面板（既可手写也可使用默认签名）。
   * 2 强制必须手绘签名（只能手写不允许使用默认签名）。
   * 默认 1
   * 非必输
   */
  private String isDrawSignatureImage;
  /**
   * 签名/印章图片。取值 default 或者指定的印章名称。
   * （手动签都用默认的）
   * 非必输
   */
  private String signatureImageName;
  /**
   * 此处有配置则签署推送消息优先使用此配置，如果此处没
   * 有配置，则取开发者统一配置的异步推送地址
   * 非必输
   */
  private String pushUrl;
  /**
   * 手动签的版本，
   * 枚举值：
   * 2-v2 版本,
   * 3-v3 版本，UI 优化，移动端手绘面板自动横屏
   * 默认为 2
   * 非必输
   */
  private String version;
  /**
   * 枚举值 0/1
   * 1-手写面板及签名图片上显示手写签名操作的时间
   * 0-不显示该时间
   * 默认为 0
   * 非必输
   */
  private String isShowHandwrittenTime;
  /**
   * 是否使用刷脸签。
   * 1-刷脸签，使用刷脸校验；
   * 0 或其他-非刷脸签，使用短信校验或无校验；
   * 非必输
   */
  private String isFaceAuth;

  @Override
  public String getMethodName() {
    return "/contract/sendByTemplate/";
  }

  @Override
  public Method getMethodType() {
    return Method.POST;
  }

  @Override
  public Class<ContractSendByTemplateResponse> getResponseClass() {
    return ContractSendByTemplateResponse.class;
  }

}
